package cn.biplam.front.template.pageFrame.dbs;

import cn.biplam.common.paramters.DbsParam;
import cn.biplam.common.paramters.DbsParam.Dbs_Reuslt_Type;
import cn.biplam.common.tools.TOOLS;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.front.html.HtmlDiv;
import cn.biplam.front.html.HtmlText;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.html.base.Const.Float_Type;
import cn.biplam.front.template.base.Anchor;

/**
 * 数据探查结果标志模板—用于绘制结果标志字段(通过,未通过)<br>
 * 在通过的前面绘制对号,在未通过前面绘制错号
 * @author XiaoRuxing Jul 24, 20092:35:27 PM
 * @version 1.0
 */
public class DbsResultFlag {

	private HtmlText logo;
	private HtmlText descText;
	private String resultFlag;
	private String fkIntegrity;
	private String haveNull;
	private Result_Type type;
	
	/**
	 * 探查结果类型
	 */
	public enum Result_Type{
		/** 复合主键探查结果 */
		Pk,
		/** 外键探查结果 */
		Fk,
		/** 其他结果 */
		Normal;
	}
	
	/**
	 * 创建探查结果标志模板
	 * @param resultFlag 结果标志
	 * @throws ErrorMessage 
	 */
	public DbsResultFlag(String resultFlag) throws ErrorMessage{
		this.resultFlag = resultFlag;
		_init();
	}
	
	/**
	 * 创建探查结果标志模板
	 * @param resultFlag 结果标志
	 * @param type       结果类型
	 * @throws ErrorMessage 
	 */
	public DbsResultFlag(String resultFlag,Result_Type type) throws ErrorMessage{
		this.resultFlag = resultFlag;
		this.type = type;
		_init();
	}
	
	/**
	 * 创建探查结果标志模板
	 * @param resultFlag 结果标志
	 * @param type       结果类型
	 * @param fkIntegrity 外键完整性
	 * @param haveNull    是有空值
	 * @throws ErrorMessage 
	 */
	public DbsResultFlag(String resultFlag,Result_Type type,String fkIntegrity,String haveNull) throws ErrorMessage{
		this.resultFlag = resultFlag;
		this.type = type;
		this.fkIntegrity = fkIntegrity;
		this.haveNull = haveNull;
		_init();
	}
	
	private void _init() throws ErrorMessage{
		_drawDesc();
		_drawLogo();
	}
	
	/**
	 * 绘制描述文本
	 * @throws ErrorMessage
	 */
	private void _drawDesc() throws ErrorMessage{
		descText = new HtmlText();
		if(this.type==Result_Type.Pk){
			descText.put(DbsParam.getPkMultiResultDesc(this.resultFlag));
		}else if(this.type==Result_Type.Fk){
			descText.put(DbsParam.getFkResultDesc(this.resultFlag,fkIntegrity, haveNull));
		}else{
			descText.put(DbsParam.getResultDesc(this.resultFlag));
		}
		descText.setFloat(Float_Type.Left);
		descText.setMarginLeft("0");
	}
	
	/**
	 * 绘制标志图标
	 * @throws ErrorMessage
	 */
	private void _drawLogo() throws ErrorMessage{
		String desc = null;
		String color = null;
		
		if(Dbs_Reuslt_Type.Passed.toString().equals(this.resultFlag)){
			desc = "√";
			color = "green";
		}else if(Dbs_Reuslt_Type.Failed.toString().equals(this.resultFlag)||
				Dbs_Reuslt_Type.Error.toString().equals(this.resultFlag)){
			desc = "×";
			color = "red";
		} 
		logo=new HtmlText();
		logo.setFontColor(color);
		logo.setFloat(Float_Type.Left);//浮动占位
		logo.put(desc);
	}
	
	/**
	 * 获取超级链接模式下的数据探查结果描述
	 * @param anchorTitle 超级链接描述
	 * @return
	 * @throws ErrorMessage
	 */
	public HtmlWindow[] getAnchor(String anchorTitle) throws ErrorMessage{
		HtmlWindow[] result=new HtmlWindow[1];
		if(Dbs_Reuslt_Type.Passed.toString().equals(this.resultFlag) || 
				Dbs_Reuslt_Type.Failed.toString().equals(this.resultFlag)||
				Dbs_Reuslt_Type.Error.toString().equals(this.resultFlag)){
			Anchor anchor=new Anchor(null);
			anchor.put(this.logo);
			anchor.put(this.descText);
			HtmlWindow rwin=anchor.get();
			rwin.setMarginTop("3");
			rwin.setTitle(anchorTitle);
			result[0]= rwin;
		}else{
			result[0]=new HtmlDiv();
		}
		return result;
	}
	
	/**
	 * 获取文本模式下的数据探查结果描述
	 * @param anchorTitle 超级链接描述
	 * @return
	 * @throws ErrorMessage
	 */
	public HtmlWindow[] getText() throws ErrorMessage{
		HtmlWindow[] result=new HtmlWindow[1];
		if(Dbs_Reuslt_Type.Passed.toString().equals(this.resultFlag) || 
				Dbs_Reuslt_Type.Failed.toString().equals(this.resultFlag)||
				Dbs_Reuslt_Type.Error.toString().equals(this.resultFlag)){
			HtmlDiv div = new HtmlDiv();
			div.put(this.logo);
			div.put(this.descText);
			div.setLength(TOOLS.getPxLength(logo.length()+descText.length()));
			div.setMarginTop("3");
			result[0]= div;
		}else{
			result[0]=new HtmlDiv();
		}
		return result;
	}
	
	/**
	 * 获取描述模式下的数据探查结果
	 * @return	HtmlWindow
	 * @throws ErrorMessage
	 */
	public HtmlWindow get() throws ErrorMessage{
		HtmlDiv div = new HtmlDiv();
		div.put(this.logo);
		div.put(this.descText);
		int length = 0;
		if(this.resultFlag!=null){
			length = TOOLS.getPxLength(this.resultFlag.getBytes().length)+logo.getLength();
		}else{
			length = logo.getLength();
		}
		div.setMarginTop("3");
		div.setLength(length);
		return div;
	}
}
